namespace RadioTimer.Models
{
    /// <summary>
    /// 报时统计信息模型类
    /// 用于存储和管理报时功能的统计数据，包括今日和总计播放次数
    /// 提供自动重置日计数和增加计数的功能
    /// </summary>
    public class ChimeStatistics
    {
        #region 公共属性
        
        /// <summary>
        /// 获取或设置今日报时次数
        /// 每日自动重置为0，每次报时后自动增加1
        /// </summary>
        public int TodayCount { get; set; }
        
        /// <summary>
        /// 获取或设置总计报时次数
        /// 累计从应用程序安装以来的所有报时次数，不会重置
        /// </summary>
        public int TotalCount { get; set; }
        
        /// <summary>
        /// 获取或设置最后一次报时的时间
        /// 用于记录和显示最近的报时时间
        /// </summary>
        public DateTime LastChimeTime { get; set; }
        
        /// <summary>
        /// 获取或设置下一次报时的时间
        /// 由系统根据当前设置自动计算和更新
        /// </summary>
        public DateTime NextChimeTime { get; set; }
        
        /// <summary>
        /// 获取或设置最后一次重置日计数的日期
        /// 用于判断是否需要重置今日计数，默认为今天
        /// </summary>
        public DateTime LastResetDate { get; set; } = DateTime.Today;
        
        #endregion

        #region 公共方法
        
        /// <summary>
        /// 重置今日计数
        /// 如果当前日期大于最后重置日期，则将今日计数重置为0
        /// 该方法在每次增加计数前自动调用，确保日计数的准确性
        /// </summary>
        public void ResetDailyCount()
        {
            if (DateTime.Today > LastResetDate)
            {
                TodayCount = 0;
                LastResetDate = DateTime.Today;
            }
        }

        /// <summary>
        /// 增加报时计数
        /// 自动重置日计数（如果需要），然后将今日和总计数各增加1
        /// 更新最后报时时间为当前时间
        /// </summary>
        public void IncrementChimeCount()
        {
            ResetDailyCount();
            TodayCount++;
            TotalCount++;
            LastChimeTime = DateTime.Now;
        }
        
        #endregion
    }
}